package com.contain2.unsupported;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class Demo1 {

	/**
	 * 因为Arrays.asList()会生成一个List，它基于一个固定大小的数组，仅支持那些不会改变数组大小的操作，对它而言是有道理的。
	 * 任何会引起对底层数据结构的尺寸进行修改的方法都会产生一个UnsupportedOperationException异常
	 * ，以表示对未获支持操作的调用。 Collections.unmodifiableList()产生不可修改的列表，连set方法也不支持。
	 * 
	 * @param msg
	 * @param list
	 */
	static void test(String msg, List<String> list) {
		System.out.println("----------" + msg + "----------");
		Collection<String> c = list;
		Collection<String> subList = list.subList(1, 8);
		Collection<String> c2 = new ArrayList<String>(subList);

		try {
			c.retainAll(c2);
		} catch (Exception e) {
			System.out.println("retainAll" + e);
		}
		try {
			c.removeAll(c2);
		} catch (Exception e) {
			System.out.println("removeAll" + e);
		}
		try {
			c.clear();
		} catch (Exception e) {
			System.out.println("clear" + e);
		}
		try {
			c.add("X");
		} catch (Exception e) {
			System.out.println("add" + e);
		}
		try {
			c.addAll(c2);
		} catch (Exception e) {
			System.out.println("addAll" + e);
		}
		try {
			c.remove("C");
		} catch (Exception e) {
			System.out.println("remove" + e);
		}
		try {
			list.set(1, "C");
		} catch (Exception e) {
			System.out.println("set" + e);
		}
	}

	public static void main(String[] args) {
		List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
		test("Modify Copy", new ArrayList<String>(list));
		test("Arrays.asList", list);
		test("unmodifiableList",
				Collections.unmodifiableList(new ArrayList<String>(list)));
	}

}
